package com.jt.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import com.jt.exception.ServiceException;

import java.util.ArrayList;
import java.util.List;

/**
 * @author dc
 * @Classname ObjectMapperUtil
 * @Date 2020/2/18 11:02
 */
public class ObjectMapperUtil {
    /**
     *   定义MAPPER对象
     */
    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 对象转化为json串
     * @param obj 需要转化的对象
     * @return json串
     */
   public static String toJson(Object obj){
       String result;
       try {
          result = MAPPER.writeValueAsString(obj);
       } catch (JsonProcessingException e) {
           throw new ServiceException("对象转换json失败");
       }
       return result;
   }

    /**
     * json串转化为对象
     * @param json 需要转化的json串
     * @param targetClass 目标类型
     * @param <T> 具体返回类型
     * @return 转化后的对象
     */
    public static <T> T toObject(String json,Class<T> targetClass){
        T obj;
        try {
           obj = MAPPER.readValue(json,targetClass);
        } catch (JsonProcessingException e) {
            throw new ServiceException("json转化对象换败");
        }
        return obj;
    }

    /**
     * 将json数组对象转化为列表对象
     * @param json 需要转换的json串
     * @param targetClass 列表里面的具体类
     * @param <T> 具体返回对象类型
     * @return 转化后的列表
     */
    public static <T> List<T> toList(String json,Class<T> targetClass){
        CollectionType listType = MAPPER.getTypeFactory().constructCollectionType(ArrayList.class, targetClass);
        List<T> list=null;
        try {
            list = MAPPER.readValue(json,listType);
        } catch (JsonProcessingException e) {
            throw new ServiceException("json转化对象换败");
        }
        return list;
    }

}
